Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

Binding και λοιπα

Îåêßíçóå áðü ôï ìÝëïò Geysser. Τελευταία δημοσίευση από το μέλος Geysser στις 12-05-2011, 20:25. Υπάρχουν 2 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  12-05-2011, 09:36 65744

    Binding και λοιπα

    Οντας σχετικά καινούριος στο WPF, από καιρού εις καιρόν αντιμετωπίζω κάποια ζητηματάκια τα οποία με προβληματίζουν. Ιδού ένα από αυτα:
    Σε ενα dialog window, εχουμε τα εξης:
    #Region "Properties"
      Public Property PiecesW As String
      Public Property PiecesH As String
      Public Property ImagePath As String
    #End Region
    Και ο constructor...

    Public Sub New()
        InitializeComponent()
     
        PiecesW = "8"
        PiecesH = "6"
        ImagePath = ""
        DataContext = Me
    End Sub
    Η ImagePath γινεται bind σε ενα textbox ως εξης:

    <TextBox x:Name="ImagePathText" Height="16"
             VerticalAlignment="Top"
             Margin="36,2,46,0"
             Style="{StaticResource FlatTextBoxStyle}">
         <TextBox.Text>
             <Binding Path="ImagePath" 
                      UpdateSourceTrigger="PropertyChanged"
                      ValidatesOnDataErrors="True" 
                      NotifyOnValidationError="True"
    Mode="TwoWay">
    <Binding.ValidationRules> <val:ImgPathValidator ValidatesOnTargetUpdated="True"/> </Binding.ValidationRules> </Binding> </TextBox.Text>
    </TextBox>
    Και τέλος, σε ένα button...
    Private Sub LoadImageButton_Click(sender As System.Object,
                                        e As System.Windows.RoutedEventArgs) _
                                Handles LoadImageButton.Click
        'Show a dialog to select image
        Dim oDlg As New OpenFileDialog
        With oDlg
          .Title = "Select Image"
          .Filter = "Bitmap Files (*.bmp)|*.bmp|" &
                    "JPEG Files (*.jpg,*.jpeg)|*.jpg;*.jpeg|" &
                    "GIF Files (*.gif)|*.gif|" &
                    "PNG Files (*.png)|*.png|" &
                    "All Image Formats (*.bmp,*.jpg,*.jpeg,*.gif,*.png)|" &
                    "*.bmp;*.jpg;*.jpeg;*.gif;*.png"
          .FilterIndex = 2
          If .ShowDialog = True Then
            ImagePath = .FileName
          End If
        End With
      End Sub
    Προβλημα: όταν αλλάζω την ImagePath μέσω της παραπάνω ρουτίνας, η τιμη δεν εμφανίζεται στο textbox. Δεν θα έπρεπε, αφου το binding είναι - λογικά - TwoWay ; Αν οχι, τι ακριβως γίνεται; Πως λύνω το θέμα (καλά, θα μπορούσα να πω ImagePathText.Text=.FileName και να λήξει εκεί η ιστορία);





  •  12-05-2011, 14:55 65745 σε απάντηση της 65744

    Απ: Binding και λοιπα

    Στην κλάση που έχεις τα properties πάνω στα οποία κάνεις bind, θα πρέπει να υλοποιείται το INotifyPropertyChanged και στον setter του κάθε property θα πρέπει να γίνεται raise το event PropertyChanged. Διαφορετικά, το UI δεν μπορεί να καταλάβει ότι κάτι έχει αλλάξει στο binded property. Προφανώς με auto-implemented properties δεν γίνεται να υλοποιηθεί αυτό το σενάριο.

    Οπότε, κάνε Import το System.ComponentModel, βάλε το "Implements INotifyPropertyChanged" στην κλάση, άλλαξε τα properties να παίζουν με setters και getters και σε κάθε setter βάλε ένα "RaiseEvent PropertyChanged(me, New PropertyChangedEventArgs(όνομα property εδώ))". Αργότερα κάνεις και λίγο refactoring για να συμμαζέψεις τον κώδικα, ωστόσο προς το παρόν, δοκίμασε ότι δουλεύει. Αν έχεις θέμα και θες περισσότερες επεξηγήσεις: http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx

     

     


    Vir prudens non contra ventum mingit
  •  12-05-2011, 20:25 65747 σε απάντηση της 65745

    Απ: Binding και λοιπα

    Το οποίον σημαίνει καλά ξενύχτια! Ευχαριστώ πολύ για την απάντηση. Τα μανίκια ψηλά τώρα! Tongue Tied
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems